{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "# ResNet"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "c007228f8d4f2774"
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:05:31.364388100Z",
     "start_time": "2024-01-15T07:05:31.231418400Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import keras\n",
    "import tensorflow as tf\n",
    "from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, BatchNormalization"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 残差块"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "c9572427985f6c7a"
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [],
   "source": [
    "from keras import activations\n",
    "class residual(keras.Model):\n",
    "    # 定义网络结构\n",
    "    def __init__(self, num_channels, use_1x1conv=False, strides=1):\n",
    "        super(residual, self).__init__()\n",
    "        self.conv1 = Conv2D(num_channels, padding=\"same\", kernel_size=3, strides=strides)\n",
    "        self.conv2 = Conv2D(num_channels, kernel_size=3, strides=strides,padding=\"same\")\n",
    "        # 是否使用1*1卷积\n",
    "        if use_1x1conv:\n",
    "            self.conv3 = Conv2D(num_channels, kernel_size=1, strides=strides)\n",
    "        else:\n",
    "            self.conv3 = None\n",
    "        # BN层 加速收敛，控制过拟合\n",
    "        self.bn1 = BatchNormalization()\n",
    "        self.bn2 = BatchNormalization()\n",
    "\n",
    "    # 传播方向\n",
    "    def call(self, x):\n",
    "        y = activations.relu(self.bn1(self.conv1(x)))\n",
    "        y = self.bn2(self.conv2(y))\n",
    "        if self.conv3:\n",
    "            x = self.conv3(x)\n",
    "        return activations.relu(y + x)\n",
    "\n",
    "\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:05:31.494317200Z",
     "start_time": "2024-01-15T07:05:31.264436700Z"
    }
   },
   "id": "e420a72dd1fd5ec7"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## resnet网络模块构成：残差模块"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "a88492a54d0873b8"
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "outputs": [],
   "source": [
    "class resnetBlock(keras.layers.Layer):\n",
    "    # 网络层定义，输出通道数（卷积核数），模块中包含的残差块个数，是否第一个模块\n",
    "    def __init__(self, num_channels, num_residuals, is_first_block=False):\n",
    "        super(resnetBlock, self).__init__()\n",
    "        #模块中的网络层，存储残差块\n",
    "        self.listLayers = []\n",
    "        for i in range(num_residuals):\n",
    "            # 如果第一个残差块并且不是第一个模块，则使用1*1卷积步长2，目的减少特征图，增大通道数\n",
    "            if i == 0 and not is_first_block:\n",
    "                self.listLayers.append((residual(num_channels, use_1x1conv=True, strides=1)))\n",
    "            else:\n",
    "                self.listLayers.append(residual(num_channels))\n",
    "\n",
    "    # 定义向前传播过程\n",
    "    def call(self, x):\n",
    "        # 所有层依次向前传播即可\n",
    "        for layer in self.listLayers.layers:\n",
    "            x = layer(x)\n",
    "        return x"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:06:06.192915500Z",
     "start_time": "2024-01-15T07:06:06.110725900Z"
    }
   },
   "id": "754d38bf46b89eab"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 构建resNet网络"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "520036a43d244969"
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "outputs": [],
   "source": [
    "class resNet(keras.Model):\n",
    "    def __init__(self, num_blocks):\n",
    "        super(resNet, self).__init__()\n",
    "        self.conv = Conv2D(64, kernel_size=7, strides=2, padding=\"same\")\n",
    "        #BN\n",
    "        self.bn = BatchNormalization()\n",
    "        #激活层\n",
    "        self.relu = keras.layers.Activation(\"relu\")\n",
    "        #池化\n",
    "        self.mp = MaxPool2D(pool_size=3, strides=2, padding=\"same\")\n",
    "        # 残差模块\n",
    "        self.res_block1 = resnetBlock(64, num_blocks[0], is_first_block=True)\n",
    "        self.res_block2 = resnetBlock(128, num_blocks[1])\n",
    "        self.res_block3 = resnetBlock(256, num_blocks[2])\n",
    "        self.res_block4 = resnetBlock(512, num_blocks[3])\n",
    "        #GAP\n",
    "        self.gap = keras.layers.GlobalAvgPool2D()\n",
    "        # 全连接层\n",
    "        self.fc = Dense(units=10, activation=\"softmax\")\n",
    "\n",
    "    def call(self, x):\n",
    "        #输入部分的传输过程\n",
    "        x = self.conv(x)\n",
    "        x = self.bn(x)\n",
    "        x = self.relu(x)\n",
    "        x = self.mp(x)\n",
    "        #block\n",
    "        x = self.res_block1(x)\n",
    "        x = self.res_block2(x)\n",
    "        x = self.res_block3(x)\n",
    "        x = self.res_block4(x)\n",
    "        # 输出部分的传输\n",
    "        x = self.gap(x)\n",
    "        x = self.fc(x)\n",
    "        return x\n"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:06:07.524282100Z",
     "start_time": "2024-01-15T07:06:07.502293500Z"
    }
   },
   "id": "e2425107990b57fb"
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 实例化"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "aa7c29c130fd8af9"
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model: \"res_net_5\"\n",
      "_________________________________________________________________\n",
      " Layer (type)                Output Shape              Param #   \n",
      "=================================================================\n",
      " conv2d_100 (Conv2D)         multiple                  3200      \n",
      "                                                                 \n",
      " batch_normalization_85 (Bat  multiple                 256       \n",
      " chNormalization)                                                \n",
      "                                                                 \n",
      " activation_5 (Activation)   multiple                  0         \n",
      "                                                                 \n",
      " max_pooling2d_5 (MaxPooling  multiple                 0         \n",
      " 2D)                                                             \n",
      "                                                                 \n",
      " resnet_block_20 (resnetBloc  multiple                 148736    \n",
      " k)                                                              \n",
      "                                                                 \n",
      " resnet_block_21 (resnetBloc  multiple                 526976    \n",
      " k)                                                              \n",
      "                                                                 \n",
      " resnet_block_22 (resnetBloc  multiple                 2102528   \n",
      " k)                                                              \n",
      "                                                                 \n",
      " resnet_block_23 (resnetBloc  multiple                 8399360   \n",
      " k)                                                              \n",
      "                                                                 \n",
      " global_average_pooling2d_5   multiple                 0         \n",
      " (GlobalAveragePooling2D)                                        \n",
      "                                                                 \n",
      " dense_5 (Dense)             multiple                  5130      \n",
      "                                                                 \n",
      "=================================================================\n",
      "Total params: 11,186,186\n",
      "Trainable params: 11,178,378\n",
      "Non-trainable params: 7,808\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "mynet = resNet([2, 2, 2, 2])\n",
    "x = tf.random.uniform((1, 224, 224, 1))\n",
    "y = mynet(x)\n",
    "mynet.summary()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:06:09.249603300Z",
     "start_time": "2024-01-15T07:06:08.604039100Z"
    }
   },
   "id": "a3ccd75469514399"
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 手写数字模型训练"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "614af5ca1cb6b1ac"
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "outputs": [],
   "source": [
    "from keras.datasets import mnist\n",
    "\n",
    "(train_image, train_label), (test_image, test_label) = mnist.load_data()\n",
    "\n",
    "# 维度调整,转换成(60000, 28, 28, 1)\n",
    "train_image = np.reshape(train_image,  # 数据源\n",
    "                         (\n",
    "                             train_image.shape[0],\n",
    "                             train_image.shape[1],\n",
    "                             train_image.shape[2],\n",
    "                             1  # 通道数1\n",
    "                         ))\n",
    "# 维度调整,转换成(60000, 28, 28, 1)\n",
    "test_image = np.reshape(test_image,  # 数据源\n",
    "                        (\n",
    "                            test_image.shape[0],\n",
    "                            test_image.shape[1],\n",
    "                            test_image.shape[2],\n",
    "                            1  # 通道数1\n",
    "                        ))"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:07:11.960129500Z",
     "start_time": "2024-01-15T07:07:11.656785900Z"
    }
   },
   "id": "805f5fc26bc288c"
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "outputs": [],
   "source": [
    "# 对训练数据进行抽样 可以不用\n",
    "def get_train(size):\n",
    "    # 随机生成index\n",
    "    index = np.random.randint(0, train_image.shape[0], size)\n",
    "    # 选择图像进行resize\n",
    "    resized_image = tf.image.resize_with_pad(train_image[index], 224, 224)\n",
    "    return resized_image.numpy(), train_label[index]\n",
    "\n",
    "# 对测试数据进行抽样 可以不用\n",
    "def get_test(size):\n",
    "    # 随机生成index\n",
    "    index = np.random.randint(0, test_image.shape[0], size)\n",
    "    # 选择图像进行resize\n",
    "    resized_image = tf.image.resize_with_pad(test_image[index], 224, 224)\n",
    "    return resized_image.numpy(), test_label[index]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:07:55.004766300Z",
     "start_time": "2024-01-15T07:07:54.961728800Z"
    }
   },
   "id": "3f6dbcf33bb46959"
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "outputs": [],
   "source": [
    "# 抽样结果\n",
    "train_image, train_label = get_train(256)\n",
    "test_image, test_label = get_test(128)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:08:08.034078100Z",
     "start_time": "2024-01-15T07:08:07.852222200Z"
    }
   },
   "id": "d6527c30ddf7e1ad"
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "outputs": [],
   "source": [
    "opt = mynet.compile(\n",
    "    optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),\n",
    "    loss=tf.keras.losses.sparse_categorical_crossentropy,\n",
    "    metrics=[\"accuracy\"]\n",
    ")"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:08:34.710218500Z",
     "start_time": "2024-01-15T07:08:34.189314800Z"
    }
   },
   "id": "d1714ceffd346146"
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n",
      "1/1 [==============================] - 78s 78s/step - loss: 2.7324 - accuracy: 0.1055 - val_loss: 3.1832 - val_accuracy: 0.1016\n",
      "Epoch 2/5\n",
      "1/1 [==============================] - 68s 68s/step - loss: 2.3939 - accuracy: 0.1641 - val_loss: 2.7934 - val_accuracy: 0.1016\n",
      "Epoch 3/5\n",
      "1/1 [==============================] - 69s 69s/step - loss: 2.2286 - accuracy: 0.2344 - val_loss: 2.8728 - val_accuracy: 0.0781\n",
      "Epoch 4/5\n",
      "1/1 [==============================] - 69s 69s/step - loss: 2.1390 - accuracy: 0.2344 - val_loss: 3.1790 - val_accuracy: 0.0781\n",
      "Epoch 5/5\n",
      "1/1 [==============================] - 68s 68s/step - loss: 2.0792 - accuracy: 0.2578 - val_loss: 3.3322 - val_accuracy: 0.0781\n"
     ]
    }
   ],
   "source": [
    "his = mynet.fit(train_image,\n",
    "                train_label,\n",
    "                batch_size=512,\n",
    "                epochs=5,\n",
    "                # validation_split=0.1,\n",
    "                validation_data=(test_image,test_label),\n",
    "                verbose=1\n",
    "                )"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:14:55.587751500Z",
     "start_time": "2024-01-15T07:09:03.249169700Z"
    }
   },
   "id": "fa5f96c0aad56afd"
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4/4 [==============================] - 7s 2s/step - loss: 3.3322 - accuracy: 0.0781\n"
     ]
    },
    {
     "data": {
      "text/plain": "[3.332232713699341, 0.078125]"
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mynet.evaluate(test_image, test_label,verbose=1)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:15:14.028217900Z",
     "start_time": "2024-01-15T07:15:06.826450200Z"
    }
   },
   "id": "e6b34cfbc458a810"
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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re7yLOFp57A61OXzZxgG48ePZ+7cuXz//fe0aNHigsd40jmsSn/lqcvnsDyGYVBYWFjue550/s7lfP2Vpy6fv4EDB7J161Y2bdpU+tWjRw/uvPNONm3ahMPhKHOMJeewxobG1gEzZswwnE6nMXnyZGPHjh3GH/7wByMoKMg4ePCgYRiG8eSTTxp33XVX6f779+83AgMDjccee8zYsWOHMXnyZMPpdBqzZ8+2qoULqmyP//73v4158+YZe/bsMbZt22Y8+eSTBmDMmTPHqhbOKzs729i4caOxceNGAzBee+01Y+PGjcahQ4cMw/D8c1jZ/jzt/P3+9783wsLCjKVLlxrJycmlX3l5eaX7ePI5rEp/nnYOn3rqKWP58uXGgQMHjC1bthhPP/20YbfbjcWLFxuG4dnnzzAq35+nnb/y/PppmrpwDr06jBiGYfz3v/81mjVrZvj6+hqXXXbZWY/c3X333cZVV1111v5Lly41unXrZvj6+hrNmzc3Jk2aVMsVV15lenzllVeMli1bGv7+/kaDBg2M/v37G1999ZUFVVfMqcfofv119913G4bh+eewsv152vkrrzfAmDJlSuk+nnwOq9Kfp53D++67r/Tfl4YNGxoDBw4s/UFtGJ59/gyj8v152vkrz6/DSF04hzbDODkqRURERMQCXjtmRERERDyDwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKW+v9a1MOa9ikP1AAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "# 绘制损失\n",
    "plt.figure()\n",
    "plt.plot(his.history['loss'], label='训练集')\n",
    "plt.plot(his.history['val_loss'], label=\"测试集(验证集)\")\n",
    "plt.legend()\n",
    "plt.grid()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:16:42.384059300Z",
     "start_time": "2024-01-15T07:16:42.102254500Z"
    }
   },
   "id": "433d1acf13b4264e"
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制准确率\n",
    "plt.figure()\n",
    "plt.plot(his.history['accuracy'], label='训练集')\n",
    "plt.plot(his.history['val_accuracy'], label=\"测试集(验证集)\")\n",
    "plt.legend()\n",
    "plt.grid()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-01-15T07:16:46.103243400Z",
     "start_time": "2024-01-15T07:16:45.786166Z"
    }
   },
   "id": "5d71a051ad9bf5ba"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false
   },
   "id": "7b1b0e2179c379d9"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
